package cn.edu.lcu.cs.javaprogramming.collection;

import cn.edu.lcu.cs.javaprogramming.oop.animal.Sheep;
import cn.edu.lcu.cs.javaprogramming.oop.animal.Wolf;
import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * 泛型编程演示
 *
 * @author ling
 * @date 2022/4/21 9:15
 */
public class
GenericsDemo {

    /**
     * 混入了狼的羊群
     */
    @Test
    void sheepFlockMingledWithWolf() {
        // List变量没有进行类型限制，允许任何Object对象添加到列表
        List flockMingledWithWolf = new ArrayList();

        // sheep是一种Object，可以添加
        flockMingledWithWolf.add(new Sheep());
        flockMingledWithWolf.add(new Sheep());
        flockMingledWithWolf.add(new Sheep());

        // wolf是一种Object，也可以添加
        flockMingledWithWolf.add(new Wolf());
        flockMingledWithWolf.add(new Sheep());

        flockMingledWithWolf.forEach(System.out::println);
    }

    /**
     * 保证狼无法混入的羊群
     */
    @Test
    void sheepFlock() {
        // 如何保证列表只能容纳指定类型的实例??
        // 代码填空
        List<Sheep> flock = new ArrayList();

        // sheep是一种Object，可以添加
        flock.add(new Sheep());
        flock.add(new Sheep());
        flock.add(new Sheep());

        // wolf是一种Object，也可以添加
        //flock.add(new Wolf());
        flock.add(new Sheep());

        flock.forEach(System.out::println);
    }


}
